# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html

import scrapy
import re
import logging
from scrapy.loader.processors import MapCompose

logger = logging.getLogger(__name__)

# 建立处理str中出现（万，手，亿）时的字典
str_dict = {
    u'手': 100,
    u'万': 10000,
    u'亿': 100000000,
    '%': 1.0
}


def parse_item_data(str):
    '''
        对item中数据进行处理
        1.input：string=“10.11万手”
        1.return: float=10110000.0 (单位：股)
        2.input：string=“10.11万”
        2.return: float=101100.0 (单位：元)
        3.input：string=“10.11亿”
        3.return: float=1011000000.0 (单位：元)
    '''
    try:
        # 取出字符串中数字
        num = float(
            re.search('\d*\.?\d{2}', str).group()
        )
    except AttributeError:
        logger.info('Invalid Item Data')
        return None

    # 对字典进行迭代，实现对数字的添0操作
    for key, value in str_dict.items():
        if key in str:
            num *= value
    return num


class BaiduItem(scrapy.Item):
    # 股票ID
    stock_ID = scrapy.Field()
    # 收盘价 单位：元
    closing_price = scrapy.Field(
        input_processor=MapCompose(parse_item_data)
    )
    # 开盘价 单位：元
    opening_price = scrapy.Field(
        input_processor=MapCompose(parse_item_data)
    )
    # 最高价 单位：元
    maximun_price = scrapy.Field(
        input_processor=MapCompose(parse_item_data)
    )
    # 最低价 单位：元
    minimun_price = scrapy.Field(
        input_processor=MapCompose(parse_item_data)
    )
    # 成交量 单位：股 整数
    turnover_total = scrapy.Field(
        input_processor=MapCompose(parse_item_data)
    )
    # 成交额 单位：元
    turnover_volume = scrapy.Field(
        input_processor=MapCompose(parse_item_data)
    )
    # 换手率 单位：小数 浮点数
    turnover_rate = scrapy.Field(
        input_processor=MapCompose(parse_item_data)
    )
    # 流通市值 单位：元 整数
    efamc = scrapy.Field(
        input_processor=MapCompose(parse_item_data)
    )
    # 总市值 单位：元 整数
    mktcap = scrapy.Field(
        input_processor=MapCompose(parse_item_data)
    )
